package com.team.RunsFast_Api.service.impl;


import com.team.RunsFast_Api.config.RedisKeyConfig;
import com.team.RunsFast_Api.config.SystemConfig;
import com.team.RunsFast_Api.dao.SmsLogDao;
import com.team.RunsFast_Api.dto.PhoneCodeDto;
import com.team.RunsFast_Api.service.intf.SmsLogService;
import com.team.RunsFast_Api.util.AliSmsUtil;
import com.team.RunsFast_Api.util.JedisUtil;
import com.team.RunsFast_Api.util.NumUtil;
import com.team.runsfast.entity.SmsLog;
import com.team.runsfast.vo.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @author csh
 * @date 2022/9/23
 */
@Service
public class SmsLogServiceImp implements SmsLogService {
    @Autowired
    private SmsLogDao dao;
    @Override
    public R sendRCode(String phone) {
        int code=sendSmsCode(phone);
        System.err.println(code);
        if(code>0){
            JedisUtil.addString(RedisKeyConfig.USER_ADDCODE+phone,code+"",RedisKeyConfig.USER_ADDCODE_TIME);
            dao.insert(new SmsLog(phone,"发送注册验证码",1,1));
            return R.ok();
        }else {
            dao.insert(new SmsLog(phone,"发送注册验证码",2,1));
            return R.fail("第三方短信平台故障！");
        }

    }
//校验注册验证码
    @Override
    public R checkRCode(PhoneCodeDto dto) {
        if(dto!=null){
            if (StringUtils.hasLength(dto.getPhone())){
                String key=RedisKeyConfig.USER_ADDCODE+dto.getPhone();
                if(JedisUtil.exists(key)){
                    if(JedisUtil.getString(key).equals(dto.getCode().toString())){
                        JedisUtil.delKey(key);
                        JedisUtil.addSet(RedisKeyConfig.USER_ADDPHONES,dto.getPhone());
                        return R.ok();

                    }
                }
            }

        }
        return R.fail();
    }

    @Override
    public R all() {
        return R.ok(dao.selectList(null));
    }

    @Override
    public R sendLCode(String phone) {
        int code=sendSmsCode(phone);
        System.err.println(code);
        if(code>0) {
            JedisUtil.addString(RedisKeyConfig.USER_ADDCODE + phone, code + "", RedisKeyConfig.USER_ADDCODE_TIME);
            dao.insert(new SmsLog(phone, "发送登录验证码", 1, 2));
            return R.ok();
        }else {
            dao.insert(new SmsLog(phone,"发送登录验证码",2,2));
            return R.fail("第三方短信平台故障！");
        }
    }
    private int sendSmsCode(String phone){
        System.err.println(phone);
        if(StringUtils.hasLength(phone)){
            if(phone.matches(SystemConfig.PHONE_RX)){
                int code= NumUtil.createNum(6);
                if(AliSmsUtil.sendCode(phone,code)){
                    return code;
                }
                return code;
            }
        }
        return 0;
    }
}
